package com.example.calculatorkotlin



import android.os.Bundle
import android.view.View
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.example.calculatorkotlin.R

class MainActivity : AppCompatActivity(), View.OnClickListener {
    private var tv_result: TextView? = null
    private var tv_temp: TextView? = null
    private var firstNum = "" // 第一个操作数
    private var operator = "" // 运算符
    private var secondNum = "" // 第二个操作数
    private var result = "" // 当前的计算结果
    private var showText = "" // 显示的文本内容
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // 从布局文件中获取名叫tv_result的文本视图
        tv_result = findViewById<TextView>(R.id.tv_result)
        // 获得tv_temp文本视图
        tv_temp = findViewById<TextView>(R.id.tv_temp)
        // 下面给每个按钮控件都注册了点击监听器
        findViewById<View>(R.id.btn_clear).setOnClickListener(this) // “清除”按钮
        findViewById<View>(R.id.btn_divide).setOnClickListener(this) // “除法”按钮
        findViewById<View>(R.id.btn_multiply).setOnClickListener(this) // “乘法”按钮
        findViewById<View>(R.id.btn_add).setOnClickListener(this) // “加法”按钮
        findViewById<View>(R.id.btn_minus).setOnClickListener(this) // “减法”按钮
        findViewById<View>(R.id.btn_retreat).setOnClickListener(this) // 求反按钮
        findViewById<View>(R.id.btn_takeMore).setOnClickListener(this) //取余
        findViewById<View>(R.id.btn_dot).setOnClickListener(this) // “小数点”按钮
        findViewById<View>(R.id.btn_equal).setOnClickListener(this) // “等号”按钮
        findViewById<View>(R.id.btn_seven).setOnClickListener(this) // 数字7
        findViewById<View>(R.id.btn_eight).setOnClickListener(this) // 数字8
        findViewById<View>(R.id.btn_nine).setOnClickListener(this) // 数字9
        findViewById<View>(R.id.btn_four).setOnClickListener(this) // 数字4
        findViewById<View>(R.id.btn_five).setOnClickListener(this) // 数字5
        findViewById<View>(R.id.btn_six).setOnClickListener(this) // 数字6
        findViewById<View>(R.id.btn_one).setOnClickListener(this) // 数字1
        findViewById<View>(R.id.btn_two).setOnClickListener(this) // 数字2
        findViewById<View>(R.id.btn_three).setOnClickListener(this) // 数字3
        findViewById<View>(R.id.btn_zero).setOnClickListener(this) // 数字0
    }

    override fun onClick(v: View) {
        val inputText: String
        val zero = "0"
        inputText = (v as TextView).text.toString()
        when (v.getId()) {
            R.id.btn_clear -> clear()
            R.id.btn_add, R.id.btn_minus, R.id.btn_multiply, R.id.btn_divide, R.id.btn_takeMore -> {
                operator = inputText // 运算符
                refreshText(showText + operator)
            }
            R.id.btn_equal ->                 //第二个没有值时
                if (secondNum === "") {
                    refreshText1("$firstNum=")
                    refreshText(firstNum)
                } else {
                    // 加减乘除
                    val calculate_result = calculateFour()
                    refreshOperate(calculate_result.toString())
                    //temp 显示计算过程
                    refreshText1("$showText=")
                    //result 显示结果
                    refreshText(result)
                }
            R.id.btn_retreat ->                 //如果无操作符则第一个数取反 有则第二个数取反
                if (operator == "") {
                    firstNum = (zero.toDouble() - firstNum.toDouble()).toString()
                    refreshText(firstNum)
                } else {
                    refreshText("error!")
                }
            else -> {
                // 上次的运算结果已出
                if (result.isNotEmpty() && operator == "") {
                    clear()
                }
                // 无运算符，继续拼接第一个操作数
                if (operator == "") {
                    firstNum += inputText
                } else {
                    // 有运算符，继续拼接第二个操作数
                    secondNum = secondNum + inputText
                }
                // 整数不需要前面的0
                if (showText == "0" && inputText != ".") {
                    refreshText(inputText)
                } else {
                    refreshText(showText + inputText)
                }
            }
        }
    }

    // 加减乘除四则运算，返回计算结果
    private fun calculateFour(): Double {
        return when (operator) {
            "＋" -> firstNum.toDouble() + secondNum.toDouble()
            "－" -> firstNum.toDouble() - secondNum.toDouble()
            "×" -> firstNum.toDouble() * secondNum.toDouble()
            "%" -> firstNum.toDouble() % secondNum.toDouble()
            else -> firstNum.toDouble() / secondNum.toDouble()
        }
    }

    // 清空并初始化
    private fun clear() {
        refreshOperate("")
        refreshText("")
        refreshText1("")
    }

    // 刷新运算结果
    private fun refreshOperate(new_result: String) {
        result = new_result
        firstNum = result
        secondNum = ""
        operator = ""
    }

    // result刷新文本显示
    private fun refreshText(text: String) {
        showText = text
        tv_result!!.text = showText
    }

    // temp刷新文本显示
    private fun refreshText1(text: String) {
        showText = text
        tv_temp!!.text = showText
    }
}